jQuery(document).ready(function($) {
    //判断是否全选
    function isAllChecked(){
      $(".all-checkbox").each(function() {
        var $self = $(this)   ,
            all   = $(this).find(":checkbox").not("[name='sales_group_id'],:disabled") ,
            allChecked = $(this).find(":checked").not("[name='all-checked']") ,
            thisAllCheckBtn = $(this).find(".all-checked [name='all-checked']");

        thisAllCheckBtn.on("click",function(){
          if($(this).get(0).checked){
            $(this).prev("span.ui-checkbox").addClass('active');
            $self.find(".levelDIV").find('input:checkbox').not(":disabled").prop('checked' ,true)
            .closest('p.check-box').find('span.ui-checkbox').addClass('active');

          }else{
            $(this).prev("span.ui-checkbox").removeClass('active');
            $self.find(".levelDIV").find('input:checkbox').not(":disabled").prop('checked' ,false)
            .closest('p.check-box').find('span.ui-checkbox').removeClass('active');
          }
        });
        if(all.length === allChecked.length){
          thisAllCheckBtn.prop('checked' ,true).prev("span.ui-checkbox").addClass('active');
        }else{
          thisAllCheckBtn.prop('checked' ,false).prev("span.ui-checkbox").removeClass('active');
        }
      });

    };
    isAllChecked();
    function countCheckboxDOM(obj){
      obj.each(function(){
        var _this_ = $(this)
        if(!_this_.parent().hasClass("vertical-checkbox")){
          // Init
          var IsLevelTwo   = _this_.closest(".all-checkbox").hasClass('level-two');
          var hei          = _this_;
          //var sed          = _this_.find(".second > .levelDIV > p.check-box");
          var sed          = IsLevelTwo?_this_.find(".second > .levelDIV"):_this_.find(".second > .levelDIV .third");
          var levelNum     = IsLevelTwo?_this_.find(".second"):_this_.find(".third");
          var levelNumWid  = levelNum.height();

          // Function
          hei.css("height",levelNumWid * sed.length);

          if(IsLevelTwo){
            sed.each(function() {
              var i = $(this).index();
              sed.eq(i).css("height",sed.get(i).clientHeight);
              var total = 0;
              for(var j = 0 ; j < sed.length ;  j++){
                total += sed.get(j).clientHeight;
              };

              hei.css("height",total);
            });
          }else{
            var t = 0;
            for(var i = 0 ; i < sed.length ; i++){
                var CH = sed.get(i).clientHeight > 0?sed.get(i).clientHeight:35;
              sed.eq(i).css("height" , CH );
              sed.prev("p.check-box").eq(i).css("height" , sed.get(i).clientHeight + 1);
              if(i>0){
                var height = sed.eq(i-1).css("height");
                var top    = sed.eq(i-1).css("top");
                var total =  parseFloat(height.substring(0,height.length-2)) + parseFloat(top.substring(0,top.length-2));
                levelNum.eq(i).css("top",total);  
              }
              t += levelNum.eq(i).height() + 1;
            }
            hei.css("height",t);
          };
          
          // for(var i = 0 ; i < levelNum.length ; i++){
          //   levelNum.eq(i).css("top",(hei.height()/sed.length)*i);  
          // }
        }
      });         
    }

    function setDisable(obj){
      obj.each(function() {
        if($(this).is(":disabled") ){
          if($(this).closest(".levelDIV").find("div").length > 0){
            $(this).closest(".levelDIV").find("input:checkbox").prop('disabled', true);
          }
          $(this).prev(".ui-checkbox").addClass('disabled');
        }
      });
    };
// ----------------------------------------------------------------
    var eachDIV      =  $(".div-checkbox") ,
        allLevelDIV  =  eachDIV.find(".levelDIV") ,
        CheckBox     =  eachDIV.find("[type=checkbox]") ;
        countCheckboxDOM(eachDIV);
        setDisable(CheckBox);
    // allLevelDIV.on('click', function(e) {
    //   // Init
    //   var isLastLevel    = $(this).closest(".levelDIV").find("div").length > 0 ;
    //   var nullCheck      = $(e.currentTarget).children('.levelDIV').find(':checked').length < 1;
    //   var thisChildCkeck = $(e.currentTarget).children('.check-box').find(':checkbox');
    //   // Function
    //   e.target.checked ? ( isLastLevel ? thisChildCkeck.prop('checked' ,true) : null ) : 
    //   ( isLastLevel && nullCheck ? thisChildCkeck.prop('checked', false) : null) ; 
    // });

    // CheckBox.on('click', function(event) {
    //   // Init
    //   var isLastLevel    = $(this).closest(".levelDIV").find("div").length > 0 ;
    //   var thisChildCkeck = $(this).closest(".levelDIV").find(":checkbox");
    //   // Function
    //   !this.checked ? ( isLastLevel ? thisChildCkeck.prop('checked', false) : null ) : 
    //   ( isLastLevel ? thisChildCkeck.prop('checked', true) : null) ;
    //   isAllChecked();
    // });

    $(".div-checkbox label,.all-checked").hover(function() {
      if(!$(this).children("input[type='checkbox']").hasClass('disabled') || !$(this).children("input[type='checkbox']").hasClass('readonly')  ){
        $(this).children("span.ui-checkbox").addClass('hover');        
      }

    }, function() {
      $(this).children("span.ui-checkbox").removeClass('hover');
    });
    
    //e.currentTarget e.target
    //从下往上选择
    allLevelDIV.on('click', function(e) {
      if(e.target.checked){
        if(e.currentTarget != $(e.target).parents(".levelDIV").get(0)){
          var levelLen = $(e.currentTarget).children('.levelDIV').length;
          $(e.currentTarget).children('p.check-box').find('input:checkbox').not(":disabled").prop('checked' ,true)
          .closest('p.check-box').find('span.ui-checkbox').addClass('active');
        }        
      }else{
        if (e.currentTarget != $(e.target).parents(".levelDIV").get(0) && $(e.currentTarget).children('.levelDIV').find('input:checked').length < 1) {
          $(e.currentTarget).children('p').find('input:checkbox').not(":disabled").prop('checked', false)
          .closest('p.check-box').find('span.ui-checkbox').removeClass('active');
        }
      }
    });
    //从上往下选择
    CheckBox.on('click', function(event) {
      if (!this.checked ) {
        if($(this).closest(".levelDIV").find("div").length > 0){
          $(this).closest(".levelDIV").find("input:checkbox").not(":disabled").prop('checked', false)
          .closest('p.check-box').find('span.ui-checkbox').removeClass('active');
        }else{
          $(this).prev('span.ui-checkbox').removeClass('active');
        }
        //event.stopPropagation();
      } else {
        if($(this).closest(".levelDIV").find("div").length > 0){
          $(this).closest(".levelDIV").find("input:checkbox").not(":disabled").prop('checked', true)
          .closest('p.check-box').find('span.ui-checkbox').addClass('active');  
        }else{
          $(this).prev('span.ui-checkbox').addClass('active');
        }
      }
      isAllChecked();
    });

});

$(window).load(function() {
  $(".all-checkbox").css("visibility" , "visible");  
});
// JavaScript Document